Data updated 2020-06-18 08:46:04. World data are from Worldometers. National and state-level mortality, case, and testing data are from Johns-Hopkins University. County and city-level mortality and case data are from the New York Times. Most data presented in this report were accessed through APIs provided by The COVID Tracking Project and NovelCOVID API.
World Data
There have been 8,251,224 confirmed Covid-19 cases and 445,188 deaths worldwide.





National Data
There have been 2,127,047 confirmed Covid-19 cases and 110,695 deaths in the United States.
Deaths
Because the effects of the virus can take several weeks to manifest in patients, deaths are a lagging indicator of contagion, but they may be a more reliable than case counts, which are a function of both the prevalence of the disease and the rate of testing.


The case mortality rate is a very crude indicator of lethality because a large numbers of non-lethal cases are likely never detected. A declining case mortality rate is indicative of more widespread testing.



Cases
Reported cases are a function of both the spread of the disease and the prevalence of testing.




Testing
Widespread testing is necessary for managing the spread of the disease. The following charts show how testing in the United States has changed over time.


When the supply of available tests is limited, they are typically only used for patients whose symptoms suggest they are likely to have contracted the virus. A high positive test rate indicates that testing capacity is constrained.


State Data
This section summarizes state-level data. Most data are reported for the largest 15 states by population, which account for NaN percent of the total U.S. population.
Testing




Interpretation of differences in case rates across states is complicated by the fact that those states that do more thorough testing will invariably uncover more cases. A lower positive test rate is an indication that a state is doing more comprehensive testing since, when testing is rationed, only those individuals who are more likely to test positive are typically tested. The following chart compares the one-week increase in detected cases to the the number of tests administered by each state relative to population. The states of greatest current concern are those with both a large increase in detected cases and a relatively small increase in tests. These states lie in the upper-right of the chart.

Local Data
The following charts present mortality, case, and testing data for the Washington DC metropolitan area.
LS0tCnRpdGxlOiAiRXJpaydzIENvdmlkLTE5IENoYXJ0IFBhY2siCm91dHB1dDoKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KCkRhdGEgdXBkYXRlZCBgciBTeXMudGltZSgpYC4gIFdvcmxkIGRhdGEgYXJlIGZyb20gW1dvcmxkb21ldGVyc10oaHR0cHM6Ly9naXRodWIuY29tL05vdmVsQ292aWQvQVBJKS4gTmF0aW9uYWwgYW5kIHN0YXRlLWxldmVsIG1vcnRhbGl0eSwgY2FzZSwgYW5kIHRlc3RpbmcgZGF0YSBhcmUgZnJvbSBbSm9obnMtSG9wa2lucyBVbml2ZXJzaXR5XShodHRwczovL2NvdmlkdHJhY2tpbmcuY29tKS4gQ291bnR5IGFuZCBjaXR5LWxldmVsIG1vcnRhbGl0eSBhbmQgY2FzZSBkYXRhIGFyZSBmcm9tIHRoZSBbTmV3IFlvcmsgVGltZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9Ob3ZlbENvdmlkL0FQSSkuIE1vc3QgZGF0YSBwcmVzZW50ZWQgaW4gdGhpcyByZXBvcnQgd2VyZSBhY2Nlc3NlZCB0aHJvdWdoIEFQSXMgcHJvdmlkZWQgYnkgW1RoZSBDT1ZJRCBUcmFja2luZyBQcm9qZWN0XShodHRwczovL2NvdmlkdHJhY2tpbmcuY29tKSBhbmQgW05vdmVsQ09WSUQgQVBJXShodHRwczovL2dpdGh1Yi5jb20vTm92ZWxDb3ZpZC9BUEkpLgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CgojIERlcGVuZGVuY2llcwpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHNjYWxlcykKbGlicmFyeSh6b28pCiNsaWJyYXJ5KHNwRGF0YSkKbGlicmFyeShzZikKbGlicmFyeSh0bWFwKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoanNvbmxpdGUpCmxpYnJhcnkodXJibm1hcHIpCmxpYnJhcnkoZ2VvZmFjZXQpCgojIEdsb2JhbCBzdHlsZSBzZXR0aW5ncwprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IEZBTFNFLAogIHdhcm5pbmcgPSBGQUxTRSwKICBtZXNzYWdlID0gRkFMU0UKKQp0aGVtZV9zZXQodGhlbWVfYncoKSkKa25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTQpIAoKIyBJbXBvcnQgd29ybGQgZGF0YQpjb250aW5lbnRzIDwtIGZyb21KU09OKCJodHRwczovL2Rpc2Vhc2Uuc2gvdjIvY29udGluZW50cz95ZXN0ZXJkYXk9dHJ1ZSIpICU+JQogIGFycmFuZ2UoY29udGluZW50KQpjb3VudHJpZXMgPC0gZnJvbUpTT04oImh0dHBzOi8vZGlzZWFzZS5zaC92Mi9jb3VudHJpZXM/eWVzdGVyZGF5PXRydWUiKSAlPiUKICBtdXRhdGUoaXNvX2EzID0gY291bnRyeUluZm8kaXNvMykKCiMgSW1wb3J0IFVTIGRhdGEKdXNEYXRhIDwtIHJlYWQuY3N2KCJodHRwczovL2NvdmlkdHJhY2tpbmcuY29tL2FwaS91cy9kYWlseS5jc3YiKQp1c0RhdGEkZGF0ZSA9IGFzLkRhdGUoYXMuY2hhcmFjdGVyKHVzRGF0YSRkYXRlKSwgZm9ybWF0ID0gIiVZJW0lZCIpCnVzRGF0YSA8LSB1c0RhdGEgJT4lIAogIGZpbHRlcihkYXRlID49IGFzLkRhdGUoIjIwMjAtMDMtNyIpKSAlPiUKICBhcnJhbmdlKGRhdGUpICU+JQogIG11dGF0ZShhY3RpdmVDYXNlcyA9IHBvc2l0aXZlIC0gcmVjb3ZlcmVkIC0gZGVhdGgpICU+JQogIG11dGF0ZShhY3RpdmVJbmNyZWFzZSA9IGFjdGl2ZUNhc2VzIC0gbGFnKGFjdGl2ZUNhc2VzLDEpKSAlPiUKICBtdXRhdGUoY2FzZURlYXRoUmF0ZSA9IGRlYXRoL3Bvc2l0aXZlKSAlPiUKICBtdXRhdGUodGVzdFBvc2l0aXZlUmF0ZSA9IHBvc2l0aXZlSW5jcmVhc2UvdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSAlPiUKICBtdXRhdGUoZGFpbHlQb3NpdGl2ZVJhdGVfID0gcG9zaXRpdmVJbmNyZWFzZS90b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZURlYXRocyA9IHJvbGxtZWFuKGRlYXRoSW5jcmVhc2Usaz03LGFsaWduPSJyaWdodCIsIGZpbGw9TkEpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VDYXNlcyA9IHJvbGxtZWFuKHBvc2l0aXZlSW5jcmVhc2Usaz03LGFsaWduPSJyaWdodCIsIGZpbGw9TkEpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VUZXN0cyA9IHJvbGxtZWFuKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICU+JQogIG11dGF0ZSh3ZWVrQ2hhbmdlRGVhdGhzID0gZGVhdGhJbmNyZWFzZSAtIGxhZyhkZWF0aEluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0NoYW5nZUNhc2VzID0gcG9zaXRpdmVJbmNyZWFzZSAtIGxhZyhwb3NpdGl2ZUluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0NoYW5nZVRlc3RzID0gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlIC0gbGFnKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSw3KSkKYGBgCgojIFdvcmxkIERhdGEKClRoZXJlIGhhdmUgYmVlbiBgciBmb3JtYXQoc3VtKGNvdW50cmllcyRjYXNlcyksYmlnLm1hcmsgPSAiLCIpYCBjb25maXJtZWQgQ292aWQtMTkgY2FzZXMgYW5kIGByIGZvcm1hdChzdW0oY291bnRyaWVzJGRlYXRocyksYmlnLm1hcmsgPSAiLCIpYCBkZWF0aHMgd29ybGR3aWRlLgoKCmBgYHtyLCBmaWcuaGVpZ2h0PTMuNSwgZmlnLndpZHRoPTZ9CmdncGxvdChjb250aW5lbnRzLCBhZXMoeD1jb250aW5lbnQseT1kZWF0aHMpKSArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMiLCB5PSJUb3RhbCBEZWF0aHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSArCiAgY29vcmRfZmxpcCgpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9My41LCBmaWcud2lkdGg9Nn0KZ2dwbG90KGNvbnRpbmVudHMsIGFlcyh4PWNvbnRpbmVudCx5PWNhc2VzKSkgKwogIGdlb21fY29sKCkgKwogIGxhYnModGl0bGUgPSAiQ2FzZXMiLCB5PSJUb3RhbCBDYXNlcyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICB0aGVtZShwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCkpICsKICBjb29yZF9mbGlwKCkKYGBgCgpcbmV3cGFnZQoKYGBge3IsIGZpZy53aWR0aD02LGZpZy5oZWlnaHQ9My41fQpkYXRhKCJXb3JsZCIpCldvcmxkJGlzb19hMyA8LSBhcy5jaGFyYWN0ZXIoV29ybGQkaXNvX2EzKQpXb3JsZCA8LSBzdF90cmFuc2Zvcm0oV29ybGQsNDMyNikKd29ybGRNYXBEYXRhIDwtIHJpZ2h0X2pvaW4oV29ybGQsY291bnRyaWVzLGJ5PSJpc29fYTMiKSAKd29ybGRNYXBEYXRhJGRlYXRoc1Blck9uZU1pbGxpb25bd29ybGRNYXBEYXRhJGRlYXRoc1Blck9uZU1pbGxpb249PTBdID0gTkEKd29ybGRNYXBEYXRhJGNhc2VzUGVyT25lTWlsbGlvblt3b3JsZE1hcERhdGEkY2FzZXNQZXJPbmVNaWxsaW9uPT0wXSA9IE5BCndvcmxkTWFwRGF0YSR0ZXN0c1Blck9uZU1pbGxpb25bd29ybGRNYXBEYXRhJHRlc3RzUGVyT25lTWlsbGlvbj09MF0gPSBOQQoKdG1fc2hhcGUod29ybGRNYXBEYXRhKSArIHRtX2JvcmRlcnMoKSArIAogIHRtX2ZpbGwoY29sID0gImRlYXRoc1Blck9uZU1pbGxpb24iLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBwZXIgTWlsbGlvbiIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTMuNX0KdG1fc2hhcGUod29ybGRNYXBEYXRhKSArIHRtX2JvcmRlcnMoKSArIAogIHRtX2ZpbGwoY29sID0gImNhc2VzUGVyT25lTWlsbGlvbiIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiQ2FzZXMgcGVyIE1pbGxpb24iKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD0zLjV9CnRtX3NoYXBlKHdvcmxkTWFwRGF0YSkgKyB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJ0ZXN0c1Blck9uZU1pbGxpb24iLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIlRlc3RzIHBlciBNaWxsaW9uIiwgcGFsZXR0ZSA9ICJCdUduIikgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIikKYGBgCgpcbmV3cGFnZQoKIyBOYXRpb25hbCBEYXRhCgpUaGVyZSBoYXZlIGJlZW4gYHIgZm9ybWF0KG1heCh1c0RhdGEkcG9zaXRpdmUpLGJpZy5tYXJrID0gIiwiKWAgY29uZmlybWVkIENvdmlkLTE5IGNhc2VzIGFuZCBgciBmb3JtYXQobWF4KHVzRGF0YSRkZWF0aCksYmlnLm1hcmsgPSAiLCIpYCBkZWF0aHMgaW4gdGhlIFVuaXRlZCBTdGF0ZXMuCgpgYGB7cn0KI3VzRGF0YSAlPiUgCiMgIHNlbGVjdChkYXRlLHBvc2l0aXZlLGRlYXRoLHBvc2l0aXZlSW5jcmVhc2UsZGVhdGhJbmNyZWFzZSkgJT4lIAojICBhcnJhbmdlKGRlc2MoZGF0ZSkpICU+JQojICB0b3BfbihuPTcsd3Q9ZGF0ZSkgJT4lCiMgIHJlbmFtZShEYXRlID0gZGF0ZSwgCiMgICAgICAgICAiQ2FzZXMiID0gcG9zaXRpdmUsIAojICAgICAgICAgIkRlYXRocyIgPSBkZWF0aCwgCiMgICAgICAgICAiTmV3IENhc2VzIiA9IHBvc2l0aXZlSW5jcmVhc2UsIAojICAgICAgICAgIk5ldyBEZWF0aHMiID0gZGVhdGhJbmNyZWFzZSkKCmNvdW50aWVzIDwtIGdldF91cmJuX21hcCgiY291bnRpZXMiLCBzZiA9IFRSVUUpICU+JQogIHN0X3RyYW5zZm9ybSgyMTYzKSAlPiUKICBtdXRhdGUoZmlwcyA9IGFzLmludGVnZXIoY291bnR5X2ZpcHMpKQoKY291bnR5RGF0YSA8LSBmcm9tSlNPTigiaHR0cHM6Ly9kaXNlYXNlLnNoL3YyL255dC9jb3VudGllcyIpICU+JQogIGZpbHRlcihkYXRlID09IG1heChkYXRlKSkgJT4lCiAgbXV0YXRlKGZpcHMgPSBhcy5pbnRlZ2VyKGZpcHMpKQoKY291bnR5RGVtb2dyYXBoaWMgPC0gcmVhZC5jc3YoImNvdW50eV9wb3AuY3N2IikgJT4lCiAgc2VsZWN0KFNUQVRFLENPVU5UWSxTVE5BTUUsQ1RZTkFNRSxQT1BFU1RJTUFURTIwMTkpICU+JQogIG11dGF0ZShmaXBzID0gU1RBVEUqMTAwMCArIENPVU5UWSkKCmNvdW50eU1hcERhdGEgPC0gbGVmdF9qb2luKGNvdW50aWVzLGNvdW50eURhdGEsIGJ5ID0gImZpcHMiKSAKY291bnR5TWFwRGF0YSA8LSBsZWZ0X2pvaW4oY291bnR5TWFwRGF0YSxjb3VudHlEZW1vZ3JhcGhpYywgYnkgPSAiZmlwcyIpCmNvdW50eU1hcERhdGEgPC0gY291bnR5TWFwRGF0YSAlPiUKICBtdXRhdGUoZGVhdGhzUGVyTWlsID0gMWU2KihkZWF0aHMpLyhQT1BFU1RJTUFURTIwMTkpKSAlPiUKICBtdXRhdGUoY2FzZXNQZXJNaWwgID0gMWU2KihjYXNlcykvKFBPUEVTVElNQVRFMjAxOSkpCmNvdW50eU1hcERhdGEkZGVhdGhzUGVyTWlsW2NvdW50eU1hcERhdGEkZGVhdGhzUGVyTWlsIDwgMC4xXSA9IDAuMQpgYGAKCiMjIERlYXRocwoKQmVjYXVzZSB0aGUgZWZmZWN0cyBvZiB0aGUgdmlydXMgY2FuIHRha2Ugc2V2ZXJhbCB3ZWVrcyB0byBtYW5pZmVzdCBpbiBwYXRpZW50cywgZGVhdGhzIGFyZSBhIGxhZ2dpbmcgaW5kaWNhdG9yIG9mIGNvbnRhZ2lvbiwgYnV0IHRoZXkgbWF5IGJlIGEgbW9yZSByZWxpYWJsZSB0aGFuIGNhc2UgY291bnRzLCB3aGljaCBhcmUgYSBmdW5jdGlvbiBvZiBib3RoIHRoZSBwcmV2YWxlbmNlIG9mIHRoZSBkaXNlYXNlIGFuZCB0aGUgcmF0ZSBvZiB0ZXN0aW5nLgoKYGBge3J9CmdncGxvdCh1c0RhdGEpICsgCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBkZWF0aCksIHNpemUgPSAxKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMiLCB4ID0gIkRhdGUiLCB5ID0gIlRvdGFsIERlYXRocyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSkgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gZGVhdGhJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IGRlYXRoSW5jcmVhc2UpLCBzZT1GQUxTRSwgc3BhbiA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IERlYXRocyIsIHggPSAiRGF0ZSIsIHkgPSAiRGVhdGhzIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQpgYGAKClRoZSBjYXNlIG1vcnRhbGl0eSByYXRlIGlzIGEgdmVyeSBjcnVkZSBpbmRpY2F0b3Igb2YgbGV0aGFsaXR5IGJlY2F1c2UgYSBsYXJnZSBudW1iZXJzIG9mIG5vbi1sZXRoYWwgY2FzZXMgYXJlIGxpa2VseSBuZXZlciBkZXRlY3RlZC4gQSBkZWNsaW5pbmcgY2FzZSBtb3J0YWxpdHkgcmF0ZSBpcyBpbmRpY2F0aXZlIG9mIG1vcmUgd2lkZXNwcmVhZCB0ZXN0aW5nLgoKYGBge3J9CmdncGxvdCh1c0RhdGEsIGFlcyh4ID0gZGF0ZSwgeSA9IGRlYXRoSW5jcmVhc2UvbGFnKHBvc2l0aXZlSW5jcmVhc2UsMTQpKSkgKwogIGdlb21fbGluZShhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBDYXNlIE1vcnRhaWx0eSBSYXRlIiwgeCA9ICJEYXRlIiwgeSA9ICJSYXRlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50X2Zvcm1hdCgpLCBsaW1pdHMgPSBjKDAuMCwwLjI1KSkKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSwgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZURlYXRocykpICsgCiAgZ2VvbV9jb2woYWxwaGEgPSAwLjUpICsKICBnZW9tX3Ntb290aChzZT1GQUxTRSwgc3BhbiA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiT25lLVdlZWsgQ2hhbmdlIGluIERhaWx5IERlYXRocyIsIHg9IkRhdGUiLCB5PSI3LURheSBDaGFuZ2UiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NywgZmlnLmhlaWdodD02fQp0bV9zaGFwZShjb3VudHlNYXBEYXRhKSArIAogIHRtX2JvcmRlcnMobHdkID0gMC4zKSArIAojICB0bV9maWxsKGNvbCA9ICJkZWF0aHNQZXJUaG8iLCAgc3R5bGUgPSAiZml4ZWQiLCBicmVha3MgPSBjKDAsMC4wMSwwLjEsMC41LDEuMCwzLjApLCB0aXRsZSA9ICJEZWF0aHMgUGVyIDFLIikgKwogIHRtX2ZpbGwoY29sID0gImRlYXRoc1Blck1pbCIsICBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBQZXIgMU0iKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKXG5ld3BhZ2UKIyMgQ2FzZXMKClJlcG9ydGVkIGNhc2VzIGFyZSBhIGZ1bmN0aW9uIG9mIGJvdGggdGhlIHNwcmVhZCBvZiB0aGUgZGlzZWFzZSBhbmQgdGhlIHByZXZhbGVuY2Ugb2YgdGVzdGluZy4KCmBgYHtyfQpnZ3Bsb3QodXNEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBhY3RpdmVDYXNlcyksIHNpemU9MSkgKwogIGxhYnModGl0bGUgPSAiQWN0aXZlIENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICJDYXNlcyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSkgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gcG9zaXRpdmVJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHBvc2l0aXZlSW5jcmVhc2UpLCBzZT1GQUxTRSwgc3BhbiA9IDAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICJDYXNlcyBwZXIgRGF5IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpgYGB7cn0KZ2dwbG90KHVzRGF0YSwgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZUNhc2VzKSkgKyAKICBnZW9tX2NvbChhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJPbmUtV2VlayBDaGFuZ2UgaW4gRGFpbHkgQ2FzZXMiLCB4PSJEYXRlIiwgeT0iNy1EYXkgQ2hhbmdlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KdG1fc2hhcGUoY291bnR5TWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKGx3ZCA9IDAuMykgKyAKIyAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJUaG8iLCBzdHlsZSA9ICJmaXhlZCIsIGJyZWFrcyA9IGMoMCwwLjEsMS4wLDUuMCwxMC4wLDMwLjApLCB0aXRsZSA9ICJDYXNlcyBQZXIgMUsiKSArCiAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkNhc2VzIFBlciAxTSIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIsIGxlZ2VuZC5wb3NpdGlvbiA9IGMoImxlZnQiLCJ0b3AiKSkKYGBgCgpcbmV3cGFnZQojIyBUZXN0aW5nCgpXaWRlc3ByZWFkIHRlc3RpbmcgaXMgbmVjZXNzYXJ5IGZvciBtYW5hZ2luZyB0aGUgc3ByZWFkIG9mIHRoZSBkaXNlYXNlLiBUaGUgZm9sbG93aW5nIGNoYXJ0cyBzaG93IGhvdyB0ZXN0aW5nIGluIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBjaGFuZ2VkIG92ZXIgdGltZS4KCmBgYHtyfQpnZ3Bsb3QodXNEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSB0b3RhbFRlc3RSZXN1bHRzKSxzaXplPTEpICsKICBsYWJzKHRpdGxlID0gIlRlc3RzIiwgeCA9ICJEYXRlIiwgeSA9ICJUb3RhbCBOdW1iZXIgb2YgVGVzdHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hLCB0cmFucyA9ICJsb2cxMCIpCmBgYAoKYGBge3J9CmdncGxvdCh1c0RhdGEpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSksIHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IFRlc3RzIiwgeCA9ICJEYXRlIiwgeSA9ICJUZXN0cyBQZXIgRGF5IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpXaGVuIHRoZSBzdXBwbHkgb2YgYXZhaWxhYmxlIHRlc3RzIGlzIGxpbWl0ZWQsIHRoZXkgYXJlIHR5cGljYWxseSBvbmx5IHVzZWQgZm9yIHBhdGllbnRzIHdob3NlIHN5bXB0b21zIHN1Z2dlc3QgdGhleSBhcmUgbGlrZWx5IHRvIGhhdmUgY29udHJhY3RlZCB0aGUgdmlydXMuIEEgaGlnaCBwb3NpdGl2ZSB0ZXN0IHJhdGUgaW5kaWNhdGVzIHRoYXQgdGVzdGluZyBjYXBhY2l0eSBpcyBjb25zdHJhaW5lZC4KCmBgYHtyfQpnZ3Bsb3QodXNEYXRhKSArCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSB0ZXN0UG9zaXRpdmVSYXRlKSwgYWxwaGEgPSAwLjQpICsKICBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gdGVzdFBvc2l0aXZlUmF0ZSksIHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiUG9zaXRpdmUgVGVzdCBSYXRlIiwgeCA9ICJEYXRlIiwgeSA9ICJSYXRlIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnRfZm9ybWF0KDIpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QodXNEYXRhLCAgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZVRlc3RzKSkgKyAKICBnZW9tX2NvbChhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuID0gMC41KSArCiAgbGFicyh0aXRsZSA9ICJPbmUtV2VlayBDaGFuZ2UgaW4gRGFpbHkgVGVzdHMiLCB4PSJEYXRlIiwgeT0iNy1EYXkgQ2hhbmdlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpcbmV3cGFnZQojIFN0YXRlIERhdGEKCgpgYGB7cn0KCiMgU3RhdGUgbmFtZSB0byBGSVBTIGNvZGUgY3Jvc3N3YWxrCnN0YXRlRklQUyA8LSByZWFkLmNzdigic3RhdGVfRklQU19jb2Rlcy5jc3YiKSAlPiUgCiAgbXV0YXRlKHN0dXNwcyA9IHRyaW13cyhhcy5jaGFyYWN0ZXIoc3R1c3BzKSkpCgojIExvYWQgc3RhdGUgbGV2ZWwgaGlzdG9yaWFsIGRhdGEKc3RhdGVEYXRhIDwtIHJlYWQuY3N2KCJodHRwczovL2NvdmlkdHJhY2tpbmcuY29tL2FwaS92MS9zdGF0ZXMvZGFpbHkuY3N2IikgJT4lCiAgbXV0YXRlKHN0YXRlID0gYXMuZmFjdG9yKHN0YXRlKSkgJT4lCiAgbXV0YXRlKGRhdGUgPSBhcy5EYXRlKGFzLmNoYXJhY3RlcihkYXRlKSwgZm9ybWF0ID0gIiVZJW0lZCIpKQoKIyBTbmFtcHNob3Qgb2YgbW9zdCByZWNlbnQgc3RhdGUgZGF0YQpjdXJyZW50U3RhdGVEYXRhIDwtIHN0YXRlRGF0YSAlPiUgZmlsdGVyKGRhdGUgPT0gbWF4KGRhdGUpKQoKIyBTdGF0ZSBwdXB1bGF0b25zCnN0YXRlUG9wID0gcmVhZC5jc3YoInN0YXRlX3BvcC5jc3YiKSAlPiUKICBzZWxlY3QoU1RBVEUsUE9QRVNUSU1BVEUyMDE5KSAlPiUKICByZW5hbWUoc3QgPSBTVEFURSwgcG9wdWxhdGlvbiA9IFBPUEVTVElNQVRFMjAxOSkKCiMgQ3JlYXRlIHN0YXRlIGRhdGEgZm9yIG1hcHBpbmcKCiMgU3RhdGUgbWFwIGJvdW5kYXJ5IGFuZCBwb3B1bGF0aW9uIGRhdGEKc3RhdGVzIDwtIGdldF91cmJuX21hcCgic3RhdGVzIiwgc2YgPSBUUlVFKSAlPiUKICBtdXRhdGUoc3QgPSBhcy5pbnRlZ2VyKHN0YXRlX2ZpcHMpKQpzdGF0ZXMgPC0gbGVmdF9qb2luKHN0YXRlcyxzdGF0ZVBvcCwgYnkgPSAic3QiKQoKI3N0YXRlcyA8LSB1c19zdGF0ZXMgJT4lCiMgIHN0X3RyYW5zZm9ybSgyMTYzKSAlPiUKIyAgbXV0YXRlKHN0ID0gYXMuaW50ZWdlcihHRU9JRCkpIAojIE1lcmdlIGN1cnJlbnQgc3RhdGUgY292aWQgZGF0YSB3aXRoIGdlb2dyYXBoaWMgZGF0YSB2aWEgRklQUyBjcm9zc3dhbGsKc3RhdGVNYXBEYXRhIDwtIGN1cnJlbnRTdGF0ZURhdGEgJT4lCiAgc2VsZWN0KHN0YXRlLHBvc2l0aXZlLGRlYXRoLHRvdGFsVGVzdFJlc3VsdHMpICU+JQogIG11dGF0ZShzdHVzcHMgPSB0cmltd3MoYXMuY2hhcmFjdGVyKHN0YXRlKSkpCnN0YXRlTWFwRGF0YSA8LSBmdWxsX2pvaW4oc3RhdGVNYXBEYXRhLHN0YXRlRklQUywgYnk9InN0dXNwcyIpCnN0YXRlTWFwRGF0YSA8LSByaWdodF9qb2luKHN0YXRlcyxzdGF0ZU1hcERhdGEsYnk9InN0IikKIyBQZXIgY2FwaXRhIGRhdGEgZm9yIG1hcHBpbnQKc3RhdGVNYXBEYXRhIDwtIHN0YXRlTWFwRGF0YSAlPiUgCiAgbXV0YXRlKGRlYXRoc1Blck1pbCA9IDFlNipkZWF0aC9wb3B1bGF0aW9uLCAKICAgICAgICAgY2FzZXNQZXJNaWwgPSAxZTYqcG9zaXRpdmUvcG9wdWxhdGlvbiwKICAgICAgICAgdGVzdHNQZXJNaWwgPSAxZTYqdG90YWxUZXN0UmVzdWx0cy9wb3B1bGF0aW9uLAogICAgICAgICBwb3NpdGl2ZVRlc3RSYXRlID0gMTAwKnBvc2l0aXZlL3RvdGFsVGVzdFJlc3VsdHMpCgojIENyZWF0ZSBsaXN0IG9mIDE1IGxhcmdlc3Qgc3RhdGVzIGJ5IHBvcHVsYXRpb24KbGFyZ2VTdGF0ZXMgPC0gc3RhdGVzICU+JQogIHNlbGVjdChzdCwgcG9wdWxhdGlvbikgJT4lCiAgYXJyYW5nZShkZXNjKHBvcHVsYXRpb24pKSAlPiUKICByZW5hbWUoZmlwcyA9IHN0KSAlPiUKICBoZWFkKDE1KQoKIyBBZGQgdmFyaWFibGUgdG8gaGlzdG9yaWNhbCBkYXRhIGZvciBsYXJnZXN0IHN0YXRlcyBhbmQgb3RoZXJzCmJpZ1N0YXRlTHZscyA9IGMobGV2ZWxzKChzdGF0ZURhdGEkc3RhdGUpKSwiT3RoZXIiKQpzdGF0ZURhdGEgPC0gc3RhdGVEYXRhICU+JQogIG11dGF0ZShiaWdTdGF0ZSA9IGlmX2Vsc2UoZmlwcyAlaW4lIGxhcmdlU3RhdGVzJGZpcHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3Ioc3RhdGUsIGxldmVscyA9IGJpZ1N0YXRlTHZscyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3IoIk90aGVyIiwgbGV2ZWxzID0gYmlnU3RhdGVMdmxzKSkpCgojIENyZWF0ZSBzdW1tYXJ5IGRhdGEgYWdncmVnYXRpbmcgIk90aGVyIiBzdGF0ZXMgdG9nZXRoZXIKYmlnU3RhdERhdGEgPC0gc3RhdGVEYXRhICU+JQogIGdyb3VwX2J5KGJpZ1N0YXRlLGRhdGUpICU+JQogIHN1bW1hcml6ZShkZWF0aCA9IHN1bShkZWF0aCwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHJlY292ZXJlZCA9IHN1bShyZWNvdmVyZWQsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICBkZWF0aEluY3JlYXNlID0gc3VtKGRlYXRoSW5jcmVhc2UsIG5hLnJtID0gVFJVRSksCiAgICAgICAgICBwb3NpdGl2ZSA9IHN1bShwb3NpdGl2ZSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHBvc2l0aXZlSW5jcmVhc2UgPSBzdW0ocG9zaXRpdmVJbmNyZWFzZSwgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHRvdGFsVGVzdFJlc3VsdHMgPSBzdW0odG90YWxUZXN0UmVzdWx0cywgbmEucm0gPSBUUlVFKSwKICAgICAgICAgIHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSA9IHN1bSh0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UsIG5hLnJtID0gVFJVRSkpCgojIEFkZCBzb21lIGRlcml2ZWQgdmFyaWFibGVzCmJpZ1N0YXREYXRhIDwtIGJpZ1N0YXREYXRhICU+JQogIGFycmFuZ2UoYmlnU3RhdGUsZGF0ZSkgJT4lCiAgZ3JvdXBfYnkoYmlnU3RhdGUpICU+JQogIG11dGF0ZShhY3RpdmVDYXNlcyA9IHBvc2l0aXZlIC0gcmVjb3ZlcmVkIC0gZGVhdGgpICU+JQogIG11dGF0ZShhY3RpdmVJbmNyZWFzZSA9IGFjdGl2ZUNhc2VzIC0gbGFnKGFjdGl2ZUNhc2VzLDEpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VEZWF0aHMgPSByb2xsbWVhbihkZWF0aEluY3JlYXNlLGs9NyxhbGlnbj0icmlnaHQiLCBmaWxsPU5BKSkgJT4lCiAgbXV0YXRlKHdlZWtDaGFuZ2VEZWF0aHMgPSBkZWF0aEluY3JlYXNlIC0gbGFnKGRlYXRoSW5jcmVhc2UsNykpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZUNhc2VzID0gcm9sbG1lYW4ocG9zaXRpdmVJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZUNhc2VzID0gcG9zaXRpdmVJbmNyZWFzZSAtIGxhZyhwb3NpdGl2ZUluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VUZXN0cyA9IHJvbGxtZWFuKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZVRlc3RzID0gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlIC0gbGFnKHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSw3KSkgJT4lCiAgbXV0YXRlKHBvc2l0aXZlVGVzdFJhdGUgPSBwb3NpdGl2ZUluY3JlYXNlIC8gdG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSAlPiUKICBmaWx0ZXIoZGF0ZSA+PSBhcy5EYXRlKCIyMDIwLTAzLTEiKSkKYGBgCgpUaGlzIHNlY3Rpb24gc3VtbWFyaXplcyBzdGF0ZS1sZXZlbCBkYXRhLiBNb3N0IGRhdGEgYXJlIHJlcG9ydGVkIGZvciB0aGUgbGFyZ2VzdCAxNSBzdGF0ZXMgYnkgcG9wdWxhdGlvbiwgd2hpY2ggYWNjb3VudCBmb3IgYHIgZm9ybWF0KDEwMCpzdW0obGFyZ2VTdGF0ZXMkdG90YWxfcG9wXzE1KS9zdW0oc3RhdGVzJHRvdGFsX3BvcF8xNSksIGRpZ2l0cyA9IDEpYCBwZXJjZW50IG9mIHRoZSB0b3RhbCBVLlMuIHBvcHVsYXRpb24uCgojIyBEZWF0aHMKCmBgYHtyfQp0b3BEZWF0aHMgPC0gY3VycmVudFN0YXRlRGF0YSAlPiUKICBzZWxlY3Qoc3RhdGUscG9zaXRpdmUsZGVhdGgpICU+JQogIGFycmFuZ2UoZGVzYyhkZWF0aCkpICU+JQogIHRvcF9uKG49MTAsd3Q9ZGVhdGgpCgp0b3BEZWF0aHNUYWJsZSA8LSB0b3BEZWF0aHMgJT4lICAKICByZW5hbWUoIFN0YXRlID0gc3RhdGUsCiAgICAgICAgICBDYXNlcyA9IHBvc2l0aXZlLAogICAgICAgICAgRGVhdGhzID0gZGVhdGgpCgpgYGAKCmBgYHtyfQpkYXRlQnJlYWtzID0gYyhhcy5EYXRlKCIyMDIwLTMtMSIpLCBhcy5EYXRlKCIyMDIwLTQtMSIpLCBhcy5EYXRlKCIyMDIwLTUtMSIpLCBhcy5EYXRlKCIyMDIwLTYtMSIpKQoKZ2dwbG90KGJpZ1N0YXREYXRhICU+JSBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpLCBhZXMoYmlnU3RhdGUsZGVhdGgpKSArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMgYnkgU3RhdGUiLCB5PSJUb3RhbCBEZWF0aHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpKSAKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9N30KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9d2Vla0F2ZXJhZ2VEZWF0aHMpKSArIAogIGdlb21fbGluZShhbHBoYT0wLjQpICsgIAogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IERlYXRocyBieSBTdGF0ZSIsIHggPSAiRGF0ZSIsIHkgPSAiRGVhdGhzIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgZmFjZXRfd3JhcCh+YmlnU3RhdGUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViIiwgYnJlYWtzID0gZGF0ZUJyZWFrcykKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9N30KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9d2Vla0NoYW5nZURlYXRocykpICsgCiAgZ2VvbV9jb2woYWxwaGE9MC41KSArIAogIGxhYnModGl0bGUgPSAiNy1EYXkgQ2hhbmdlIGluIERhaWx5IERlYXRocyIsIHggPSAiRGF0ZSIsIHkgPSAiNy1EYXkgQ2hhbmdlIikgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICBmYWNldF93cmFwKH5iaWdTdGF0ZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWIiLCBicmVha3MgPSBkYXRlQnJlYWtzKQpgYGAKXG5ld3BhZ2UKCmBgYHtyLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD02fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAiZGVhdGgiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyIpICsgICAgCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTZ9CnRtX3NoYXBlKHN0YXRlTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJkZWF0aHNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkRlYXRocyBwZXIgMU0iKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKXG5ld3BhZ2UKIyMgQ2FzZXMKCmBgYHtyfQp0b3BDYXNlcyA8LSBjdXJyZW50U3RhdGVEYXRhICU+JQogIHNlbGVjdChzdGF0ZSxwb3NpdGl2ZSxkZWF0aCkgJT4lCiAgYXJyYW5nZShkZXNjKHBvc2l0aXZlKSkgJT4lCiAgdG9wX24obj0xMCx3dD1wb3NpdGl2ZSkKCnRvcENhc2VzVGFibGUgPC0gdG9wQ2FzZXMgJT4lCiAgcmVuYW1lKFN0YXRlID0gc3RhdGUsCiAgICAgICAgIENhc2VzID0gcG9zaXRpdmUsCiAgICAgICAgIERlYXRocyA9IGRlYXRoKQpgYGAKCgpgYGB7cn0KZ2dwbG90KGJpZ1N0YXREYXRhICU+JSBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpLCAKICAgICAgIGFlcyhiaWdTdGF0ZSxwb3NpdGl2ZSkpICArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJDYXNlcyBieSBTdGF0ZSIsIHk9IlRvdGFsIENhc2VzIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKwogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9cG9zaXRpdmVJbmNyZWFzZSkpICsKICBnZW9tX2xpbmUoYWxwaGE9MC40KSArICAKICBnZW9tX3Ntb290aChzZT1GQUxTRSwgc3Bhbj0wLjUpICsgCiAgbGFicyh0aXRsZSA9ICJOZXcgQ2FzZXMgYnkgU3RhdGUiLCB4ID0gIkRhdGUiLCB5ID0gIkNhc2VzIHBlciBEYXkiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgZmFjZXRfd3JhcCh+YmlnU3RhdGUsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViIiwgYnJlYWtzID0gZGF0ZUJyZWFrcykKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9d2Vla0NoYW5nZUNhc2VzKSkgKyAKICBnZW9tX2NvbChhbHBoYT0wLjUpICsgIAogIGxhYnModGl0bGUgPSAiNy1EYXkgQ2hhbmdlIGluIERhaWx5IENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICI3LURheSBDaGFuZ2UiKSArCiAgZ2VvbV9zbW9vdGgoc2U9RkFMU0UsIHNwYW49MC41KSArIAogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKwogIGZhY2V0X3dyYXAofmJpZ1N0YXRlLCBzY2FsZXMgPSAiZnJlZV95IikgKwogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlYiIsIGJyZWFrcyA9IGRhdGVCcmVha3MpCmBgYApcbmV3cGFnZQoKYGBge3IsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTZ9CnRtX3NoYXBlKHN0YXRlTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJwb3NpdGl2ZSIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiQ2FzZXMiKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYAoKCmBgYHtyLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD02fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAiY2FzZXNQZXJNaWwiLCBzdHlsZSA9ICJsb2cxMCIsIHRpdGxlID0gIkNhc2VzIHBlciAxTSIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIsIGxlZ2VuZC5wb3NpdGlvbiA9IGMoImxlZnQiLCJ0b3AiKSkKYGBgCgpcbmV3cGFnZQojIyBUZXN0aW5nCgpgYGB7cn0KZ2dwbG90KGJpZ1N0YXREYXRhICU+JSBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpLCAKICAgICAgIGFlcyhiaWdTdGF0ZSx0b3RhbFRlc3RSZXN1bHRzKSkgICsKICBnZW9tX2NvbCgpICsKICBsYWJzKHRpdGxlID0gIlRlc3RzIGJ5IFN0YXRlIiwgeT0iVG90YWwgVGVzdHMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUocGFuZWwuZ3JpZC5tYWpvciA9IGVsZW1lbnRfYmxhbmsoKSwgcGFuZWwuZ3JpZC5taW5vciA9IGVsZW1lbnRfYmxhbmsoKSwgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCgpgYGB7ciwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGJpZ1N0YXREYXRhLCBhZXMoeD1kYXRlLHk9dG90YWxUZXN0UmVzdWx0c0luY3JlYXNlKSkgKwogIGdlb21fbGluZShhbHBoYT0wLjQpICsgIAogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKyAKICBsYWJzKHRpdGxlID0gIk5ldyBUZXN0cyBieSBTdGF0ZSIsIHggPSAiRGF0ZSIsIHkgPSAiVGVzdHMgcGVyIERheSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpICsKICBmYWNldF93cmFwKH5iaWdTdGF0ZSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBzY2FsZV94X2RhdGUoZGF0ZV9sYWJlbHMgPSAiJWIiLCBicmVha3MgPSBkYXRlQnJlYWtzKQpgYGAKClxuZXdwYWdlCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAidGVzdHNQZXJNaWwiLCBzdHlsZSA9ICJjb250IiwgdGl0bGUgPSAiVGVzdHMgcGVyIDFNIiwgcGFsZXR0ZSA9ICJCdUduIikgKwogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIiwgbGVnZW5kLnBvc2l0aW9uID0gYygibGVmdCIsInRvcCIpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQp0bV9zaGFwZShzdGF0ZU1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAicG9zaXRpdmVUZXN0UmF0ZSIsIHN0eWxlID0gImNvbnQiLCB0aXRsZSA9ICJQb3NpdGl2ZSBSYXRlIiwgbGVnZW5kLmZvcm1hdCA9IGxpc3QoZGlnaXRzPTEpKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLCBsZWdlbmQucG9zaXRpb24gPSBjKCJsZWZ0IiwidG9wIikpCmBgYApcbmV3cGFnZQoKSW50ZXJwcmV0YXRpb24gb2YgZGlmZmVyZW5jZXMgaW4gY2FzZSByYXRlcyBhY3Jvc3Mgc3RhdGVzIGlzIGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhvc2Ugc3RhdGVzIHRoYXQgZG8gbW9yZSB0aG9yb3VnaCB0ZXN0aW5nIHdpbGwgaW52YXJpYWJseSB1bmNvdmVyIG1vcmUgY2FzZXMuIEEgbG93ZXIgcG9zaXRpdmUgdGVzdCByYXRlIGlzIGFuIGluZGljYXRpb24gdGhhdCBhIHN0YXRlIGlzIGRvaW5nIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nIHNpbmNlLCB3aGVuIHRlc3RpbmcgaXMgcmF0aW9uZWQsIG9ubHkgdGhvc2UgaW5kaXZpZHVhbHMgd2hvIGFyZSBtb3JlIGxpa2VseSB0byB0ZXN0IHBvc2l0aXZlIGFyZSB0eXBpY2FsbHkgdGVzdGVkLiBUaGUgZm9sbG93aW5nIGNoYXJ0IGNvbXBhcmVzIHRoZSBvbmUtd2VlayBpbmNyZWFzZSBpbiBkZXRlY3RlZCBjYXNlcyB0byB0aGUgdGhlIG51bWJlciBvZiB0ZXN0cyBhZG1pbmlzdGVyZWQgYnkgZWFjaCBzdGF0ZSByZWxhdGl2ZSB0byBwb3B1bGF0aW9uLiAgVGhlIHN0YXRlcyBvZiBncmVhdGVzdCBjdXJyZW50IGNvbmNlcm4gYXJlIHRob3NlIHdpdGggYm90aCBhIGxhcmdlIGluY3JlYXNlIGluIGRldGVjdGVkIGNhc2VzIGFuZCBhIHJlbGF0aXZlbHkgc21hbGwgaW5jcmVhc2UgaW4gdGVzdHMuICBUaGVzZSBzdGF0ZXMgbGllIGluIHRoZSB1cHBlci1yaWdodCBvZiB0aGUgY2hhcnQuCgpgYGB7ciwgZmlnLndpZHRoPTYuNSwgZmlnLmhlaWdodD02fQpzdGF0ZVdhdGNoRGF0YSA8LSBsZWZ0X2pvaW4oc3RhdGVEYXRhLCBzdGF0ZVBvcCAlPiUgcmVuYW1lKGZpcHM9c3QpLCBieSA9ICJmaXBzIikKCnN0YXRlV2F0Y2hEYXRhIDwtIHN0YXRlV2F0Y2hEYXRhICU+JQogIGdyb3VwX2J5KHN0YXRlKSAlPiUKICBhcnJhbmdlKHN0YXRlLGRhdGUpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZURlYXRocyA9IHJvbGxtZWFuKGRlYXRoSW5jcmVhc2Usaz03LGFsaWduPSJyaWdodCIsIGZpbGw9TkEpKSAlPiUKICBtdXRhdGUod2Vla0NoYW5nZURlYXRocyA9IGRlYXRoSW5jcmVhc2UgLSBsYWcoZGVhdGhJbmNyZWFzZSw3KSkgJT4lCiAgbXV0YXRlKHdlZWtBdmVyYWdlQ2FzZXMgPSByb2xsbWVhbihwb3NpdGl2ZUluY3JlYXNlLGs9NyxhbGlnbj0icmlnaHQiLCBmaWxsPU5BKSkgICU+JQogIG11dGF0ZSh3ZWVrQ2hhbmdlQ2FzZXMgPSBwb3NpdGl2ZUluY3JlYXNlIC0gbGFnKHBvc2l0aXZlSW5jcmVhc2UsNykpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZVRlc3RzID0gcm9sbG1lYW4odG90YWxUZXN0UmVzdWx0c0luY3JlYXNlLGs9NyxhbGlnbj0icmlnaHQiLCBmaWxsPU5BKSkgICU+JQogIG11dGF0ZSh3ZWVrQ2hhbmdlVGVzdHMgPSB0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UgLSBsYWcodG90YWxUZXN0UmVzdWx0c0luY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUocG9zaXRpdmVUZXN0UmF0ZSA9IHBvc2l0aXZlSW5jcmVhc2UgLyB0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UpICU+JQogIG11dGF0ZSh3a1Bvc2l0aXZlVGVzdFJhdGUgPSAocG9zaXRpdmUtbGFnKHBvc2l0aXZlLDcpKSAvICh0b3RhbFRlc3RSZXN1bHRzLWxhZyh0b3RhbFRlc3RSZXN1bHRzLDcpKSApICU+JQogIG11dGF0ZSh3a0Nhc2VzUGVyQ2FwID0gMWU2Kihwb3NpdGl2ZS1sYWcocG9zaXRpdmUsNykpIC8gcG9wdWxhdGlvbikgJT4lCiAgbXV0YXRlKHdrVGVzdHNQZXJDYXAgPSAxZTYqKHRvdGFsVGVzdFJlc3VsdHMtbGFnKHRvdGFsVGVzdFJlc3VsdHMsNykpIC8gcG9wdWxhdGlvbikgJT4lCiAgZmlsdGVyKGRhdGUgPj0gbWF4KGRhdGUpKQogIApyYXRlcyA8LSBjKDAuMTAsMC4wNSwwLjAyKQpnZ3Bsb3Qoc3RhdGVXYXRjaERhdGEsIGFlcyh4PXdrVGVzdHNQZXJDYXAseT13a0Nhc2VzUGVyQ2FwLCBzaXplPTAuMSpwb3B1bGF0aW9uLGxhYmVsPXN0YXRlKSkgKyAKICBnZW9tX3BvaW50KGFlcyh4PXdrVGVzdHNQZXJDYXAseT13a0Nhc2VzUGVyQ2FwLHNpemU9cG9wdWxhdGlvbiksIGFscGhhID0gMC4yNSkgKwogIGdlb21fdGV4dCgpICsKICBnZW9tX2FibGluZShpbnRlcmNlcHQgPSAwLCBzbG9wZSA9IHJhdGVzWzFdLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBzaXplID0gMC41LCBjb2xvciA9ICJncmF5IikgKwogIGdlb21fdGV4dChhZXMoMTUwMDAsMTUwMDAqcmF0ZXNbMV0pLCBsYWJlbD0iMTAlIFBvc2l0aXZlIiwgc2l6ZSA9IDIuNSwgaGp1c3QgPSAxLjEsIGNvbG9yID0gImdyYXkiKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPSByYXRlc1syXSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDAuNSwgY29sb3IgPSAiZ3JheSIpICsKICBnZW9tX3RleHQoYWVzKDIwMDAwLDIwMDAwKnJhdGVzWzJdKSwgbGFiZWw9IjUlIFBvc2l0aXZlIiwgc2l6ZSA9IDIuNSwgaGp1c3QgPSAxLjIsIGNvbG9yID0gImdyYXkiKSArCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gMCwgc2xvcGUgPXJhdGVzWzNdLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBzaXplID0gMC41LCBjb2xvciA9ICJncmF5IikgKwogIGdlb21fdGV4dChhZXMoMjAwMDAsMjAwMDAqcmF0ZXNbM10pLCBsYWJlbD0iMiUgUG9zaXRpdmUiLCBzaXplID0gMi41LCBoanVzdCA9IDEuMywgY29sb3IgPSAiZ3JheSIpICsKICBsYWJzKHRpdGxlID0gIlRlc3RzIHZzLiBDYXNlcyBieSBTdGF0ZSIsIAogICAgICAgeCA9ICI3LURheSBOZXcgVGVzdHMgcGVyIE1pbGxpb24iLCAKICAgICAgIHkgPSAiNy1EYXkgTmV3IENhc2VzIHBlciBNaWxsaW9uIiwKICAgICAgIGNhcHRpb24gPSAiUG9pbnQgc2l6ZSBwcm9wb3J0aW9uYWwgdG8gc3RhdGUgcG9wdWxhdGlvbi4iKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCmBgYHtyfQpnZ3NhdmUoIlRlc3RzX3ZzX0Nhc2VzLnBuZyIpCmBgYAoKClxuZXdwYWdlCiMgTG9jYWwgRGF0YQoKVGhlIGZvbGxvd2luZyBjaGFydHMgcHJlc2VudCBtb3J0YWxpdHksIGNhc2UsIGFuZCB0ZXN0aW5nIGRhdGEgZm9yIHRoZSBXYXNoaW5ndG9uIERDIG1ldHJvcG9saXRhbiBhcmVhLgoKYGBge3J9CmxvY2FsRGF0YSA8LSBzdGF0ZURhdGEgJT4lIAogIGZpbHRlcihzdGF0ZSAlaW4lIGMoIlZBIiwiREMiLCJNRCIpKSAlPiUKICBhcnJhbmdlKHN0YXRlLGRhdGUpICU+JQogIGdyb3VwX2J5KHN0YXRlKSAlPiUKICBtdXRhdGUod2Vla0F2ZXJhZ2VEZWF0aHMgPSByb2xsbWVhbihkZWF0aEluY3JlYXNlLGs9NyxhbGlnbj0icmlnaHQiLCBmaWxsPU5BKSkgJT4lCiAgbXV0YXRlKHdlZWtDaGFuZ2VEZWF0aHMgPSBkZWF0aEluY3JlYXNlIC0gbGFnKGRlYXRoSW5jcmVhc2UsNykpICU+JQogIG11dGF0ZSh3ZWVrQXZlcmFnZUNhc2VzID0gcm9sbG1lYW4ocG9zaXRpdmVJbmNyZWFzZSxrPTcsYWxpZ249InJpZ2h0IiwgZmlsbD1OQSkpICAlPiUKICBtdXRhdGUod2Vla0NoYW5nZUNhc2VzID0gcG9zaXRpdmVJbmNyZWFzZSAtIGxhZyhwb3NpdGl2ZUluY3JlYXNlLDcpKSAlPiUKICBtdXRhdGUocG9zaXRpdmVUZXN0UmF0ZSA9IGlmZWxzZSh0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UgPiAxMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpdmVJbmNyZWFzZSAvIHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQSkpICU+JQogIG11dGF0ZSh3ZWVrQ2hhbmdlVGVzdHMgPSB0b3RhbFRlc3RSZXN1bHRzSW5jcmVhc2UgLSBsYWcodG90YWxUZXN0UmVzdWx0c0luY3JlYXNlLDcpKSAlPiUKICBmaWx0ZXIoZGF0ZSA+PSBhcy5EYXRlKCIyMDIwLTAzLTEiKSkKYGBgCgoKYGBge3J9CnJlY2VudExvY2FsIDwtIGxvY2FsRGF0YSAlPiUKICBmaWx0ZXIoZGF0ZSA9PSBtYXgoZGF0ZSkpICU+JQogIHNlbGVjdChzdGF0ZSwgcG9zaXRpdmUsIGRlYXRoLCBwb3NpdGl2ZUluY3JlYXNlLCBkZWF0aEluY3JlYXNlKSAlPiUKICByZW5hbWUoU3RhdGU9c3RhdGUsICJDYXNlcyIgPSBwb3NpdGl2ZSwgIkRlYXRocyIgPSBkZWF0aCwgIk5ldyBDYXNlcyIgPSBwb3NpdGl2ZUluY3JlYXNlLCAiTmV3IERlYXRocyIgPSBkZWF0aEluY3JlYXNlKQpgYGAKCiMjIERlYXRocwoKYGBge3J9CmdncGxvdChsb2NhbERhdGEpICsgCiAgZ2VvbV9saW5lKG1hcHBpbmcgPSBhZXMoeCA9IGRhdGUsIHkgPSBkZWF0aCwgY29sb3IgPSBzdGF0ZSksIHNpemUgPSAxKSArCiAgbGFicyh0aXRsZSA9ICJEZWF0aHMiLCB4ID0gIkRhdGUiLCB5ID0gIlRvdGFsIERlYXRocyIsIGNvbG9yID0gIlN0YXRlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSwgdHJhbnMgPSAibG9nMTAiKSAKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGxvY2FsRGF0YSkgKwogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gZGVhdGhJbmNyZWFzZSksIGFscGhhID0gMC40KSArCiAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IGRlYXRoSW5jcmVhc2UpLCBzZT1GQUxTRSwgc3Bhbj0wLjUpICsKICBsYWJzKHRpdGxlID0gIk5ldyBEZWF0aHMiLCB4ID0gIkRhdGUiLCB5ID0gIkRlYXRocyBwZXIgRGF5IiwgY29sb3IgPSAiU3RhdGUiKSArCiAgZmFjZXRfd3JhcCh+c3RhdGUsIG5jb2wgPSAxLCBzY2FsZXMgPSAiZnJlZV95IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGxvY2FsRGF0YSwgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZURlYXRocykpICsgCiAgZ2VvbV9jb2woYWxwaGEgPSAwLjUpICsKICBnZW9tX3Ntb290aChzZT1GQUxTRSwgc3Bhbj0wLjUpICsgCiAgbGFicyh0aXRsZSA9ICJPbmUtV2VlayBDaGFuZ2UgaW4gRGFpbHkgRGVhdGhzIiwgeD0iRGF0ZSIsIHk9IjctRGF5IENoYW5nZSIpICsKICBmYWNldF93cmFwKH5zdGF0ZSwgbmNvbCA9IDEsIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQpsb2NhbE1hcERhdGEgPC0gY291bnR5TWFwRGF0YSAlPiUKICBmaWx0ZXIoc3RhdGVfZmlwcyAlaW4lIGMoMjQsMTEsNTEpKSAKbG9jYWxTdGF0ZU1hcHMgPC0gc3RhdGVNYXBEYXRhICU+JQogIGZpbHRlcihzdCAlaW4lIGMoMjQsMTEsNTEpKQoKdG1fc2hhcGUobG9jYWxNYXBEYXRhKSArIAogIHRtX2JvcmRlcnMobHdkID0gMC4zKSArIAogIHRtX2ZpbGwoY29sID0gImRlYXRoc1Blck1pbCIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiRGVhdGhzIHBlciAxTSIpICsKICB0bV9zaGFwZShsb2NhbFN0YXRlTWFwcykgKwogIHRtX2JvcmRlcnMobHdkID0gMS41LCBjb2wgPSAiZ3JheSIpICsKICB0bV9sYXlvdXQoYmcuY29sb3IgPSAic2t5Ymx1ZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTV9Cm5lYXJNYXBEYXRhIDwtIGxvY2FsTWFwRGF0YSAlPiUKICBmaWx0ZXIoZmlwcyAlaW4lIGMoNTE2MDAsNTE1MTAsNTE2MTAsNTEwNTksNTExMDcsNTEwMTMsMTEwMDEsMjQwMzEsMjQwMzMpKQoKdG1fc2hhcGUobmVhck1hcERhdGEpICsgCiAgdG1fYm9yZGVycygpICsgCiAgdG1fZmlsbChjb2wgPSAiZGVhdGhzUGVyTWlsIiwgc3R5bGUgPSAibG9nMTAiLCB0aXRsZSA9ICJEZWF0aHMgcGVyIDFNIikgKwogIHRtX3RleHQoImNvdW50eSIsIHNpemU9MC41KSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiKQpgYGAKClxuZXdwYWdlCiMjIENhc2VzCgpgYGB7cn0KZ2dwbG90KGxvY2FsRGF0YSkgKyAKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHBvc2l0aXZlLCBjb2xvciA9IHN0YXRlKSwgc2l6ZT0xKSArCiAgbGFicyh0aXRsZSA9ICJDYXNlcyIsIHggPSAiRGF0ZSIsIHkgPSAiVG90YWwgQ2FzZXMiLCBjb2xvciA9ICJTdGF0ZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikgCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CmdncGxvdChsb2NhbERhdGEpICsKICBnZW9tX2xpbmUobWFwcGluZyA9IGFlcyh4ID0gZGF0ZSwgeSA9IHBvc2l0aXZlSW5jcmVhc2UpLCBhbHBoYT0wLjQpICsKICBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gcG9zaXRpdmVJbmNyZWFzZSksIHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiTmV3IENhc2VzIiwgeCA9ICJEYXRlIiwgeSA9ICJDYXNlcyBwZXIgRGF5IiwgY29sb3IgPSAiU3RhdGUiKSArCiAgZmFjZXRfd3JhcCh+c3RhdGUsIG5jb2wgPSAxLCBzY2FsZXMgPSAiZnJlZV95IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9Nn0KZ2dwbG90KGxvY2FsRGF0YSwgYWVzKHggPSBkYXRlLCB5ID0gd2Vla0NoYW5nZUNhc2VzKSkgKyAKICBnZW9tX2NvbChhbHBoYSA9IDAuNSkgKwogIGdlb21fc21vb3RoKHNlID0gRkFMU0UsIHNwYW4gPSAwLjUpICsKICBsYWJzKHRpdGxlID0gIk9uZS1XZWVrIENoYW5nZSBpbiBEYWlseSBDYXNlcyIsIHg9IkRhdGUiLCB5PSI3LURheSBDaGFuZ2UiKSArCiAgZmFjZXRfd3JhcCh+c3RhdGUsIG5jb2wgPSAxLCBzY2FsZXMgPSAiZnJlZV95IikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTYsIGZpZy5oZWlnaHQ9NX0KdG1fc2hhcGUobG9jYWxNYXBEYXRhKSArIAogIHRtX2JvcmRlcnMobHdkID0gMC4zKSArIAogIHRtX2ZpbGwoY29sID0gImNhc2VzUGVyTWlsIiwgc3R5bGUgPSAibG9nMTAiLCB0aXRsZSA9ICJDYXNlcyBwZXIgMU0iKSArCiAgdG1fc2hhcGUobG9jYWxTdGF0ZU1hcHMpICsKICB0bV9ib3JkZXJzKGx3ZCA9IDEuNSwgY29sID0gImdyYXkiKSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD01fQp0bV9zaGFwZShuZWFyTWFwRGF0YSkgKyAKICB0bV9ib3JkZXJzKCkgKyAKICB0bV9maWxsKGNvbCA9ICJjYXNlc1Blck1pbCIsIHN0eWxlID0gImxvZzEwIiwgdGl0bGUgPSAiQ2FzZXMgcGVyIDFNIikgKwogIHRtX3RleHQoImNvdW50eSIsIHNpemU9MC41KSArCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiKQpgYGAKClxuZXdwYWdlCiMjIFRlc3RpbmcKCmBgYHtyfQpnZ3Bsb3QobG9jYWxEYXRhKSArIAogIGdlb21fbGluZShtYXBwaW5nID0gYWVzKHggPSBkYXRlLCB5ID0gdG90YWxUZXN0UmVzdWx0cywgY29sb3IgPSBzdGF0ZSksIHNpemUgPSAxKSArCiAgbGFicyh0aXRsZSA9ICJUZXN0cyIsIHggPSAiRGF0ZSIsIHkgPSAiVG90YWwgVGVzdHMiLCBjb2xvciA9ICJTdGF0ZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEsIHRyYW5zID0gImxvZzEwIikgCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CmdncGxvdChsb2NhbERhdGEsIGFlcyh4ID0gZGF0ZSwgeSA9IHRvdGFsVGVzdFJlc3VsdHNJbmNyZWFzZSkpICsKICBnZW9tX2xpbmUoYWxwaGE9MC40KSArCiAgZ2VvbV9zbW9vdGgoc2U9RkFMU0UsIHNwYW49MC41KSArCiAgbGFicyh0aXRsZSA9ICJOZXcgVGVzdHMiLCB4ID0gIkRhdGUiLCB5ID0gIlRlc3RzIHBlciBEYXkiKSArCiAgZmFjZXRfd3JhcCh+c3RhdGUsIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMSkgKyAKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCmBgYAoKYGBge3IsIGZpZy53aWR0aD02LCBmaWcuaGVpZ2h0PTZ9CmdncGxvdChsb2NhbERhdGEsIGFlcyh4ID0gZGF0ZSwgeSA9IHBvc2l0aXZlVGVzdFJhdGUpKSArCiAgZ2VvbV9saW5lKGFscGhhPTAuNCkgKwogIGdlb21fc21vb3RoKHNlPUZBTFNFLCBzcGFuPTAuNSkgKwogIGxhYnModGl0bGUgPSAiUG9zaXRpdmUgVGVzdCBSYXRlIiwgeCA9ICJEYXRlIiwgeSA9ICJSYXRlIikgKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBwZXJjZW50X2Zvcm1hdCgyKSwgbGltaXRzID0gYygwLjAsMC40KSkgKwogIGZhY2V0X3dyYXAofnN0YXRlLCBuY29sID0gMSkgCmBgYAo=